#include"comm.hpp"
#include<iostream>
#include<cerrno>
#include<cstring>
#include<unistd.h>      
#include <fcntl.h>
#include<sys/types.h>
#include<sys/stat.h>

int main()
{
    // 1. 创建命名管道，只需一次
    umask(0);  //  设置默认掩码
    int n = mkfifo(fifo_name.c_str(), mode);  // 创建命名管道
    if(n != 0)
    {
        std::cout << errno << ":" << strerror(errno) << std::endl;
        return 1;
    }
    std::cout << "create fifo_pipe success" << std::endl;
    // 2. 打开管道文件
    int rfd = open(fifo_name.c_str(), O_RDONLY);
    if(rfd <= 0)
    {
        std::cout << errno << ":" << strerror(errno) << std::endl;
        return 2;
    }
    std::cout << "open fifo_pipe success, begin ipc" << std::endl;

    // 3. 正常通信
    char buff[LEN];
    while (true)
    {
        ssize_t n = read(rfd, buff, sizeof(buff)-1);  // 在命名管道里读数据
        if(n > 0)
        {
            buff[n] = 0;
            std::cout << "#client:" << buff << std::endl;
        }
        else if(n == 0)
        {
            std::cout << "client quit, so am i" << std::endl;
            break;
        }
        else
        {
            std::cout << errno << ":" << strerror(errno) << std::endl;
            break;
        }
    }
    
    // 4. 关闭不用的fd
    close(rfd);
    unlink(fifo_name.c_str());  // 删除命名管道
    return 0;
}